package com.aop.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * @author wzm
 * @create 2023-10-16 10:12
 * project_name:javaweb2308
 */
//定义aop功能类 用于对service方法进行增强在方法前后书写代码计算方法的执行时间
@Component
//@Aspect //当前类为切面类
@Slf4j
public class AspectTime {

    //增强的时候利用切面类中的方法写代码进行增强
    //指定为哪些方法进行增强（切入点表达式）  在要增强方法的什么时候执行@Around 方法前后
    // 任何返回值 com.aop.service下的所有包及其子包的所有类的方法的所有参数
    @Around("execution(* com.aop.service.*.*(..))")
    public Object getTime(ProceedingJoinPoint pjp) throws Throwable {
        //记录方法开始执行时间
        long begin = System.currentTimeMillis();

        //执行原始的方法
        Object result = pjp.proceed();

        //记录方法执行结束的时间
        long end = System.currentTimeMillis();

        //计算方法执行运行了多少时间
        log.info("方法："+pjp.getSignature()+"执行花费了，{}",end-begin);


        //返回原始方法执行的对象
        return  result;
    }
}
